package com.hf.mapdemo;

import java.util.*;

public class TestDriver {
    public static void main(String[] args) {
        System.out.println("==============HashMap================");
        test01();
        System.out.println("===============LinkedHashMap=================");
        test02();
        System.out.println("==============TreeMap==================");
        test03();
    }
    /**
     * 使用泛型
     * Map--TreeMap
     */
    public static void test03(){
        //面向接口的编程思想
        //父类指向子类
        Map map = new TreeMap();
        //添加元素
        map.put("232", "张三");
        map.put("2054", "张三");
        map.put("2412", "张三");
        map.put("2412", "张si");
        map.put("2023", "张三");
        map.put("2032", "张三");
        map.put("2014", "张三");
        //map.put(null, "张三");
        map.put("null", null);
        //遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对 entry键值对集合的遍历
        Set set = map.entrySet();
        //转换为色图集合遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            //获取set集合Entry元素对象
            Object obj = iterator.next();
            //强制转换--向下溯型
            Map.Entry entry = (Map.Entry) obj;
            String str = (String)entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(entry.getKey()+"--"+entry.getValue());
        }
        System.out.println("-----------------------------------");
        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset
        Set set1 = map.keySet();
        //key的set集合遍历
        for (Object obj : set1){
            // obj 是 键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj+"--"+map.get(obj));
        }
        System.out.println("-----------------------------------");
        //将 Map 转变为set的value集合
        Collection collection = map.values();
        for (Object s : collection){
            System.out.println(s);
        }
    }

    /**
     * Map--LinkedHashMap
     */
    public static void test02(){
        //面向接口的编程思想
        //父类指向子类
        Map map = new LinkedHashMap();
        //添加元素
        map.put("232", "张三");
        map.put("2054", "张三");
        map.put("2412", "张三");
        map.put("2412", "张si");
        map.put("2023", "张三");
        map.put("2032", "张三");
        map.put("2014", "张三");
        map.put(null, "张三");
        map.put(null, null);
        //遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对 entry键值对集合的遍历
        Set set = map.entrySet();
        //转换为色图集合遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            //获取set集合Entry元素对象
            Object obj = iterator.next();
            //强制转换--向下溯型
            Map.Entry entry = (Map.Entry) obj;
            String str = (String)entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(entry.getKey()+"--"+entry.getValue());
        }
        System.out.println("-----------------------------------");
        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset
        Set set1 = map.keySet();
        //key的set集合遍历
        for (Object obj : set1){
            // obj 是 键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj+"--"+map.get(obj));
        }
        System.out.println("-----------------------------------");
        //将 Map 转变为set的value集合
        Collection collection = map.values();
        for (Object s : collection){
            System.out.println(s);
        }
    }
    /**
     * Map--HashMap
     */
    public static void test01(){
        //面向接口的编程思想
        //父类指向子类
        Map map = new HashMap();
        //添加元素
        map.put("232", "张三");
        map.put("2054", "张三");
        map.put("2412", "张三");
        map.put("2412", "张si");
        map.put("2023", "张三");
        map.put("2032", "张三");
        map.put("2014", "张三");
        map.put(null, "张三");
        map.put(null, null);
        //遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对 entry键值对集合的遍历
        Set set = map.entrySet();
        //转换为色图集合遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            //获取set集合Entry元素对象
            Object obj = iterator.next();
            //强制转换--向下溯型
            Map.Entry entry = (Map.Entry) obj;
            String str = (String)entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(entry.getKey()+"--"+entry.getValue());
        }
        System.out.println("-----------------------------------");
        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset
        Set set1 = map.keySet();
        //key的set集合遍历
        for (Object obj : set1){
            // obj 是 键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj+"--"+map.get(obj));
        }
        System.out.println("-----------------------------------");
        //将 Map 转变为set的value集合
        Collection collection = map.values();
        for (Object s : collection){
            System.out.println(s);
        }
    }


}
